package com.xc.file.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xc.core.bean.QueryBean;
import com.xc.core.dto.FileDto;
import com.xc.file.bean.FileBean;
import com.xc.file.bean.UpdateFileBean;
import com.xc.file.dto.CdnDto;
import com.xc.file.entity.FileEntity;
import com.xc.file.model.DownloadModel;

import java.util.List;

/**
 * <p>文件管理接口</p>
 *
 * @author xc
 * @version v1.0.0
 */
public interface FileService extends IService<FileEntity> {

    /**
     * <p>创建文件</p>
     *
     * @param userId   用户id
     * @param fileBean 文件信息
     * @param isVerify 是否验证目录信息
     * @return 创建成功的文件信息
     */
    public FileEntity createFile(String userId, FileBean fileBean, boolean isVerify);


    /**
     * <p>修改用户的文件名称</p>
     *
     * @param userIds        用户主键集合
     * @param fileId         文件id
     * @param updateFileBean 文件信息
     * @return 返回结果
     */
    public FileDto updateUserFile(List<String> userIds, String fileId, UpdateFileBean updateFileBean);

    /**
     * <p>获取用户的文件集合</p>
     *
     * @param userIds    用户主键集合
     * @param queryBean  查询基础条件
     * @param fileEntity 文件条件
     * @return 文件信息集合
     */
    public List<FileDto> getUserFileList(String userId,List<String> userIds, QueryBean queryBean, FileEntity fileEntity);

    /**
     * <p>删除用户的文件</p>
     *
     * @param userIds 用户主键集合
     * @param fileId  文件id
     */
    public FileEntity deleteUserFile(List<String> userIds, String fileId);

    /**
     * <p>写入下载文件地址</p>
     *
     * @param files        文件信息集合
     * @param downloadPath 下载地址
     * @return 文件信息集合，带有下载url
     */
    public List<FileDto> setDownloadUrl(List<FileDto> files, String downloadPath);


    /**
     * 验证下载文件
     *
     * @param referer 当前请求域
     * @param userId  用户id
     * @param path    文件路径，带文件名
     * @return 下载信息
     */
    public DownloadModel getOpenDownload(String referer, String userId, String path);

    /**
     * 验证用户文件
     *
     * @param downloadCode 下载code
     * @param fid          文件id
     * @return 下载信息
     */
    public DownloadModel getDownloadModel(String downloadCode, String fid, String downloadType);

    /**
     * 下载完成
     *
     * @param downloadModel 参数
     */
    public void downloadFinish(DownloadModel downloadModel, long size);

    /**
     * 创建当前用户的cdn地址
     *
     * @param userId 用户主键
     */
    public CdnDto createCdnUrl(String userId, String fileId);

    /**
     * 根据文件夹主键集合获取文件
     *
     * @param folderIds 文件夹主键集合
     * @return 文件信息
     */
    public List<FileEntity> getFilesByFolderIds(String userId, List<String> folderIds);

    /**
     * 批量复制文件
     *
     * @param files 文件集合
     * @return 文件集合
     */
    public List<FileEntity> batchCopyFile(String userId, String folderId, List<FileEntity> files);

}
